/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.publicarNoticia;

import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.naming.InitialContext;
import uy.edu.ort.dominio.ManejoJSON;
import uy.edu.ort.dominio.Noticia;
import uy.edu.ort.publicar.servicios.ManejoArchivos;

/**
 *
 * @author Gonza
 */
@Stateless
public class PublicarNoticiaSB implements PublicarNoticiaSBLocal {
    
    static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(PublicarNoticiaSB.class);
    
    @Override
    public void publicarNoticia(String noticia) {
        System.out.println("Se publicó noticia en PublicarNoticiaSB" + noticia);
        
        //Si llegó es válida y la tengo que publicar
        //Paso el JSON a Objeto Noticia, obtengo el topico, busco con ObtenerDestinationTopico en archivo Topicos.txt
        // y mando la noticia al topic correspondiente
        //Paso el JSON a Noticia
        ManejoJSON mj = new ManejoJSON();
        Noticia noti = new Noticia();
        noti = mj.JSONToNoticia(noticia);
        //obtengo el topico d ela noticia
        String topico = noti.getTopico();
        //obtengo el destination al cual corresponde el topico
        ManejoArchivos archivo = new ManejoArchivos();
        String destinationTopic = archivo.ObtenerDestinationTopico(topico);
        
        System.out.println("Destination es: " + destinationTopic);
        
        try {
            //Seteo las Properties para el contexto
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
            props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
            props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
            props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
            //Creo el Contexto para obtener los recursos del servidor
            InitialContext ic = new InitialContext(props);
            // Obtenemos a traves del servicio JNDI la ConnectionFactory del
            // servidor de aplicaciones
            ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup("CF01");
            // Obtenemos a traves del servicio JNDI la "destination" que vamos
            // a utilizar, en este caso una Queue
            //Topic topic = (Topic) ic.lookup("jms/Topic01");
            Topic topic = (Topic) ic.lookup(destinationTopic);
            //Creo la Connection mediante la ConnectionFactory
            Connection connection = connectionFactory.createConnection();
            //Creo la Session mediante la Connection
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //Creo la MessageProducer mediante la Session
            MessageProducer messageProducer = session.createProducer(topic);
            //Creo la TextMessage mediante la Session
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText(noticia);
            //Envío el mensaje mediante MessageProducer
            messageProducer.send(textMessage);

            //FIXME: Ver si va.
            connection.close();

        } catch (Exception ex) {
            Logger.getLogger(PublicarNoticiaSB.class.getName()).log(Level.SEVERE, null, ex);
            logger.error(ex.toString());
        }

    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    
}
